考虑示例应用程序的emp表。emp表的行根据mgr列构成层次结构,该列包含员工经理的员工编号。每个员工最多有一名经理。KING是公司总裁,所以KING没有经理,因此KING的mgr列为null。此外,一个员工也可能担任多个员工的经理。这种关系形成了一个典型的树结构层次组织结构图。

结构图如下图所示。

组织树

要基于此关系构成分层查询,SELECT 命令需要包含子句 CONNECT BY PRIOR empno = mgr。例如,假设公司总裁 KING 的员工编号为 7839,则其 mgr 列为 7839 的任何员工都是 KING 的直属下级,这适用于 JONES、BLAKE 和 CLARK(这些是 KING 的子节点)。同样,对于员工 JONES,其 mgr 列等于 7566 的任何其他员工也都是 JONES 的子节点;在此示例中这些员工是 SCOTT 和 FORD。

该组织结构图的顶层是 KING,因而这个树中有一个根节点。START WITH mgr IS NULL 子句仅选择 KING 作为初始根节点。

下面显示了完整的 SELECT 命令。

SELECT ename, empno, mgr
FROM emp
START WITH mgr IS NULL
CONNECT BY PRIOR empno = mgr;

该查询输出中的行按从上到下、从左到右的顺序移动,从根到叶遍历每个分支。下面是此查询的输出。

 ename  | empno | mgr
--------+-------+------
 KING   |  7839 |
 JONES  |  7566 | 7839
 SCOTT  |  7788 | 7566
 ADAMS  |  7876 | 7788
 FORD   |  7902 | 7566
 SMITH  |  7369 | 7902
 BLAKE  |  7698 | 7839
 ALLEN  |  7499 | 7698
 WARD   |  7521 | 7698
 MARTIN |  7654 | 7698
 TURNER |  7844 | 7698
 JAMES  |  7900 | 7698
 CLARK  |  7782 | 7839
 MILLER |  7934 | 7782
(14 rows)